#include "bsp_key.h"

/** 
 * @Description 按键扫描函数
 * @return u8   按键键值
 */
u8 Key_Scan()
{
        /* 保存按键键值的变量，默认值0xff表示没有按键按下 */
	u8 keyValue = 0xff;
        
        int i = 0;
        
        /* 这里在1ms前后检测两边是为了滤除按键抖动产生的尖峰脉冲 */
	if(GPIO_KEY != 0xff)
	{
		delay_ms(1);
                
                /* 如果1ms前后检测都是低电平的话，就说明是真的有按键按下 */
		if(GPIO_KEY != 0xff)
		{
                        /* 真的有按键按下，则将按键键值存入keyValue中 */
			keyValue = GPIO_KEY;
                        
                        /* 这里是松手检测，在50ms内按键没有放开，程序会一直停在此处 */
                        /* 倘若50ms期间，松开了按键，则会跳出此while循环 */
                        /* 也就是说：按键没有松开的话，程序不会去做其他的事情 */
                        /* 当然也有松手检测的超时时间，就是我们设置的50ms */
//			while((i < 50) && (GPIO_KEY != 0xff))
//			{
//				delay_ms(1);
//				i++;
//			}
                        
                        while(GPIO_KEY != 0xff);
		}
	}
        
        /* 返回按键的键值，通过解析这个键值，就能知道是哪一个按键按下 */
	return keyValue;
}

/** 
 * @Description 通过软件延时实现的简单延时函数
 */
void delay_ms(u32 time)
{
	u32 i, j;
	for(i = time; i > 0; i--)
		for(j = 296; j > 0; j--);
}
